package com.zxy.leetcode._00300_00399._00320_00329;

/**
 * https://leetcode-cn.com/problems/power-of-three/
 *
 * 326. 3的幂
 *
 * 给定一个整数，写一个函数来判断它是否是 3 的幂次方。如果是，返回 true ；否则，返回 false 。
 * 整数 n 是 3 的幂次方需满足：存在整数 x 使得 n == 3x
 *
 * 提示：
 * -2^31 <= n <= 2^31 - 1
 *
 * 进阶：
 * 你能不使用循环或者递归来完成本题吗？
 *
 * 标签：数字
 *
 */
public class Test00326 {

    public static void main(String[] args) {
        Test00326 test = new Test00326();
        System.out.println(test.isPowerOfThree(27) == true);
        System.out.println(test.isPowerOfThree(0) == false);
        System.out.println(test.isPowerOfThree(45) == false);
        System.out.println(test.isPowerOfThree(-3) == false);
    }

    public boolean isPowerOfThree(int n) {
        if (n <= 0) {
            return false;
        }

        while (n > 1) {
            if (n % 3 != 0) {
                return false;
            }
            n = n / 3;
        }
        return true;
    }

    /*
    https://leetcode-cn.com/problems/power-of-three/solution/3de-mi-by-leetcode-solution-hnap/
    官方的参考答案
    在题目给定的 32 位有符号整数的范围内，最大的 3 的幂为 3^19 = 11622614673。
    我们只需要判断 n 是否是 3^19 的约数即可。
     */
    public boolean isPowerOfThree2(int n) {
        return n > 0 && 1162261467 % n == 0;
    }

}
